home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / win / vb / fixmenu.exe / MENU.TXT < prev    next >
Encoding:
Text File  |  1991-09-06  |  8.1 KB  |  238 lines

  1. '  Menu flags for Add/Check/EnableMenuItem()
  2. Global Const MF_INSERT = &H0
  3. Global Const MF_CHANGE = &H80
  4. Global Const MF_APPEND = &H100
  5. Global Const MF_DELETE = &H200
  6. Global Const MF_REMOVE = &H1000
  7.  
  8. Global Const MF_BYCOMMAND = &H0
  9. Global Const MF_BYPOSITION = &H400
  10.  
  11. Global Const MF_SEPARATOR = &H800
  12.  
  13. Global Const MF_ENABLED = &H0
  14. Global Const MF_GRAYED = &H1
  15. Global Const MF_DISABLED = &H2
  16.  
  17. Global Const MF_UNCHECKED = &H0
  18. Global Const MF_CHECKED = &H8
  19. Global Const MF_USECHECKBITMAPS = &H200
  20.  
  21. Global Const MF_STRING = &H0
  22. Global Const MF_BITMAP = &H4
  23. Global Const MF_OWNERDRAW = &H100
  24.  
  25. Global Const MF_POPUP = &H10
  26. Global Const MF_MENUBARBREAK = &H20
  27. Global Const MF_MENUBREAK = &H40
  28.  
  29. Global Const MF_UNHILITE = &H0
  30. Global Const MF_HILITE = &H80
  31.  
  32. Global Const MF_SYSMENU = &H2000
  33. Global Const MF_HELP = &H4000
  34. Global Const MF_MOUSESELECT = &H8000
  35.  
  36. '  Menu item resource format
  37. Type MENUITEMTEMPLATEHEADER
  38.     versionNumber As Integer
  39.     offset As Integer
  40. End Type
  41.  
  42. Type MENUITEMTEMPLATE
  43.     mtOption As Integer
  44.     mtID As Integer
  45.     mtString As Long
  46. End Type
  47.  
  48. Global Const MF_END = &H80
  49.  
  50. '  System Menu Command Values
  51. Global Const SC_SIZE = &HF000
  52. Global Const SC_MOVE = &HF010
  53. Global Const SC_MINIMIZE = &HF020
  54. Global Const SC_MAXIMIZE = &HF030
  55. Global Const SC_NEXTWINDOW = &HF040
  56. Global Const SC_PREVWINDOW = &HF050
  57. Global Const SC_CLOSE = &HF060
  58. Global Const SC_VSCROLL = &HF070
  59. Global Const SC_HSCROLL = &HF080
  60. Global Const SC_MOUSEMENU = &HF090
  61. Global Const SC_KEYMENU = &HF100
  62. Global Const SC_ARRANGE = &HF110
  63. Global Const SC_RESTORE = &HF120
  64. Global Const SC_TASKLIST = &HF130
  65.  
  66. Global Const SC_ICON = SC_MINIMIZE
  67. Global Const SC_ZOOM = SC_MAXIMIZE
  68.  
  69. Declare Function LoadMenu Lib "User" (ByVal hInstance As Integer, ByVal lpString As String) As Integer
  70. Declare Function LoadMenuIndirect Lib "User" (lpMenuTemplate As MENUITEMTEMPLATE) As Integer
  71. Declare Function GetMenu Lib "User" (ByVal hWnd As Integer) As Integer
  72. Declare Function SetMenu Lib "User" (ByVal hWnd As Integer, ByVal hMenu As Integer) As Integer
  73. Declare Function ChangeMenu Lib "User" (ByVal hMenu As Integer, ByVal wId As Integer, ByVal lpszNew As String, ByVal wIDNew As Integer, ByVal wChange As Integer) As Integer
  74. Declare Function HiliteMenuItem Lib "User" (ByVal hWnd As Integer, ByVal hMenu As Integer, ByVal wIDHiliteItem As Integer, ByVal wHilite As Integer) As Integer
  75. Declare Function GetMenuString Lib "User" (ByVal hMenu As Integer, ByVal wIDItem As Integer, ByVal lpString As String, ByVal nMaxCount As Integer, ByVal wFlag As Integer) As Integer
  76. Declare Function GetMenuState Lib "User" (ByVal hMenu As Integer, ByVal wId As Integer, ByVal wFlags As Integer) As Integer
  77. Declare Sub DrawMenuBar Lib "User" (ByVal hWnd As Integer)
  78. Declare Function GetSystemMenu Lib "User" (ByVal hWnd As Integer, ByVal bRevert As Integer) As Integer
  79. Declare Function CreateMenu Lib "User" () As Integer
  80. Declare Function CreatePopupMenu Lib "User" () As Integer
  81. Declare Function DestroyMenu Lib "User" (ByVal hMenu As Integer) As Integer
  82. Declare Function CheckMenuItem Lib "User" (ByVal hMenu As Integer, ByVal wIDCheckItem As Integer, ByVal wCheck As Integer) As Integer
  83. Declare Function EnableMenuItem Lib "User" (ByVal hMenu As Integer, ByVal wIDEnableItem As Integer, ByVal wEnable As Integer) As Integer
  84. Declare Function GetSubMenu Lib "User" (ByVal hMenu As Integer, ByVal nPos As Integer) As Integer
  85. Declare Function GetMenuItemID Lib "User" (ByVal hMenu As Integer, ByVal nPos As Integer) As Integer
  86. Declare Function GetMenuItemCount Lib "User" (ByVal hMenu As Integer) As Integer
  87.  
  88. Declare Function InsertMenu Lib "User" (ByVal hMenu As Integer, ByVal nPosition As Integer, ByVal wFlags As Integer, ByVal wIDNewItem As Integer, ByVal lpNewItem As Any) As Integer
  89. Declare Function AppendMenu Lib "User" (ByVal hMenu As Integer, ByVal wFlags As Integer, ByVal wIDNewItem As Integer, ByVal lpNewItem As Any) As Integer
  90. Declare Function ModifyMenu Lib "User" (ByVal hMenu As Integer, ByVal nPosition As Integer, ByVal wFlags As Integer, ByVal wIDNewItem As Integer, ByVal lpString As Any) As Integer
  91. Declare Function RemoveMenu Lib "User" (ByVal hMenu As Integer, ByVal nPosition As Integer, ByVal wFlags As Integer) As Integer
  92. Declare Function DeleteMenu Lib "User" (ByVal hMenu As Integer, ByVal nPosition As Integer, ByVal wFlags As Integer) As Integer
  93. Declare Function SetMenuItemBitmaps Lib "User" (ByVal hMenu As Integer, ByVal nPosition As Integer, ByVal wFlags As Integer, ByVal hBitmapUnchecked As Integer, ByVal hBitmapChecked As Integer) As Integer
  94. Declare Function GetMenuCheckMarkDimensions Lib "User" () As Long
  95. Declare Function TrackPopupMenu Lib "User" (ByVal hMenu As Integer, ByVal wFlags As Integer, ByVal x As Integer, ByVal y As Integer, ByVal nReserved As Integer, ByVal hWnd As Integer, lpReserved As Any) As Integer
  96.  
  97. DefInt A-Z
  98. Dim LMenu As Integer
  99.  
  100. Sub AddApp_Click ()
  101.  
  102. Msg$ = "Enter Path:"
  103. FileSpec$ = InputBox$(Msg$)
  104. LMenu = LMenu + 1
  105. Load AppName(LMenu)
  106. AppName(LMenu).Caption = FileSpec$
  107.  
  108. End Sub
  109.  
  110. Sub AddMenuItem_Click ()
  111.  
  112. '-- add the new menu item
  113. LMenu = LMenu + 1
  114. Load AppName(LMenu)
  115.  
  116. '-- set the appropriate properties
  117. ahWnd = Form1.hWnd
  118. MenuCaption$ = MenuText.Text
  119. Result = SetMenuItem(ahWnd, 0, LMenu + 2, MenuCaption$, -SepBarCheck.Value)
  120.  
  121. End Sub
  122.  
  123. Sub SetItem_Click ()
  124.  
  125. '-- sets a previously existing menu item
  126.  
  127. ahWnd = Form1.hWnd
  128. MenuCaption$ = MenuText.Text
  129. Result = SetMenuItem(ahWnd, Val(SubMenu.Text), Val(MenuItem.Text), MenuCaption$, -SepBarCheck.Value)
  130.  
  131. End Sub
  132.  
  133. Sub ExitProgram_Click ()
  134.  
  135. End
  136.  
  137. End Sub
  138.  
  139. Sub UpdateItemInfo ()
  140.  
  141. '-- update the caption text and Separator Bar checkbox
  142. ahWnd = Form1.hWnd
  143. nSubMenu = Val(SubMenu.Text)
  144. nItemPos = Val(MenuItem.Text)
  145. MenuText.Text = MenuItemCaption(ahWnd, nSubMenu, nItemPos)
  146. SepBarCheck.Value = SepBar(ahWnd, nSubMenu, nItemPos)
  147.  
  148. End Sub
  149.  
  150. Sub MenuItem_LostFocus ()
  151.  
  152. UpdateItemInfo
  153.  
  154. End Sub
  155.  
  156. Sub SubMenu_LostFocus ()
  157.  
  158. UpdateItemInfo
  159.  
  160. End Sub
  161.  
  162. DefInt A-Z
  163.  
  164. Function SetMenuItem (ahWnd As Integer, nSubPos As Integer, nItemPos As Integer, MenuItem$, fSepBar As Integer) As Integer
  165.  
  166. '-- Sets the MenuItem in SubMenu nSubPos at position nItemPos
  167. '   with the appropriate caption MenuItem$ and being a separator bar
  168. '   if SepBar is TRUE, or not a separator bar if SepBar is FALSE
  169.  
  170. '-- get the item ID number
  171. wMenuID = MenuItemID(ahWnd, nSubPos, nItemPos)
  172.  
  173. '-- MF_BYCOMMAND means that we're using the menu item ID, not position
  174. '-- get the current menu item flags using the menu item ID
  175. wMenuFlags = GetMenuState(hMenu, wMenuID, MF_BYCOMMAND)
  176.  
  177. If fSepBar Then
  178.     '-- turn MF_SEPARATOR on
  179.     wMenuFlags = wMenuFlags Or MF_SEPARATOR
  180. Else
  181.     '-- turn MF_SEPARATOR off
  182.     wMenuFlags = wMenuFlags And Not MF_SEPARATOR
  183. End If
  184.  
  185. '-- we always locate via the menu item ID
  186. wMenuFlags = wMenuFlags Or MF_BYCOMMAND
  187.  
  188. '-- modify the menu item and return the result back to the caller
  189. SetMenuItem = ModifyMenu(hMenu, wMenuID, wMenuFlags, wMenuID, MenuItem$)
  190.  
  191. End Function
  192.  
  193. Function MenuItemCaption (ahWnd As Integer, nSubPos As Integer, nItemPos As Integer) As String
  194.  
  195. '-- get the handle to the menu
  196. hMenu = GetMenu(ahWnd)
  197.  
  198. '-- get the menu item ID
  199. wMenuIDItem = MenuItemID(ahWnd, nSubPos, nItemPos)
  200.  
  201. '-- allocate space for menu item caption
  202. Temp$ = Space$(40)
  203.  
  204. StrLen = GetMenuString(hMenu, wMenuIDItem, Temp$, Len(Temp$), MF_BYCOMMAND)
  205. MenuItemCaption$ = Left$(Temp$, StrLen)
  206.  
  207. End Function
  208.  
  209. Function MenuItemID (ahWnd As Integer, nSubPos As Integer, nItemPos As Integer) As Integer
  210.  
  211. '-- get the handle to the menu
  212. hMenu = GetMenu(ahWnd)
  213.  
  214. '-- get the handle to the SubMenu
  215. hSubMenu = GetSubMenu(hMenu, nSubPos)
  216.  
  217. '-- get the menu item ID
  218. MenuItemID = GetMenuItemID(hSubMenu, nItemPos)
  219.  
  220. End Function
  221.  
  222. Function SepBar (ahWnd As Integer, nSubPos As Integer, nItemPos As Integer) As Integer
  223.  
  224. '-- get the handle to the menu
  225. hMenu = GetMenu(ahWnd)
  226.  
  227. '-- get the item ID number
  228. wMenuID = MenuItemID(ahWnd, nSubPos, nItemPos)
  229.  
  230. '-- get the flags for the item
  231. wMenuFlags = GetMenuState(hMenu, wMenuID, MF_BYCOMMAND)
  232.  
  233. '-- return a 1 (TRUE) or 0 (FALSE) state value for the separator bar
  234. SepBar = Abs((wMenuFlags And MF_SEPARATOR) <> 0)
  235.  
  236. End Function
  237.  
  238.